はじめての ALB なのに WebSocket を試す
こんにちは、菅野です。
ALB がリリースされ、DevelopersIO で公開されたいくつかのブログエントリーを見ていて
WebSocket に対応したというのが気になったので実際に試してみました。
WebSocket って?
一昔前、Web のシステムを作成していた人ならほとんどの方が思ったであろう「Push通知が欲しい」を
実現したプロトコルです。
通常の HTTP ではクライアントから要求されないとサーバーから発信できませんでしたが、WebSocketを
使うとサーバーが好きなタイミングでクライアントへメッセージを送信する事が可能になります。
WebSocketについて調べてみた
今回のテストの構成
アクセスするURL
- Web ページは「http://ALBのDNS名/index.php」
- WebSocket は「ws://ALBのDNS名/ws/server.php」
用意するターゲットグループ
- 「/*」へのアクセスはインスタンスへ80ポートで接続
- 「/ws/*」へのアクセスはインスタンスへ9000ポートで接続
ターゲットグループの作成
Web ページアクセス用「tg-webpage」
WebSocket アクセス用「tg-websocket」
- 名前とポート(9000)を入力します
- ヘルスチェックのパスに「/index.php」を指定します
- このままだとヘルスチェックとして「/index.php」へ9000ポートでアクセスするので
ヘルスチェックの詳細設定で「上書き」を選択しポートに「80」と入力します
インスタンスを登録しておく
ALB の作成
注意点
- 必ず異なる AZ にある二つのサブネットが必要です
名前を入力します
先ほど作成したターゲットグループを登録します
ターゲットグループを追加する
最後にアイドルタイムアウトを指定します
ALB はできたが
ALB はできました。EC2 インスタンスもあります。
サーバー側とクライアント側のコンテンツがありません。一から作る気力もありません。
apache だけインストールすれば、ちょいちょいでできるものはないかと探していたらありました。
WebSocket Example
ありがとうございます。ありがたく使わせていただきます。
このサンプルはチャットができるものになっています。確かに WebSocket は使っていますが、
結局クライアント側のアクションに対してサーバーが動くのでイメージしていたものと違います。
軽く改造して、1分毎にサーバーから時刻とサーバー名を送りつけるような仕様に変更しました。
やっと動かすところ
サーバーから1分毎に情報が送信されてきていますので成功です。
冷静に書いてますが、実は感動しています。ブラウザから何も送信していないのに、
何も要求していないのに情報が送られてきてるんですよ!Push通知ですよ!
さいごに
いかがでしたでしょうか。
ここまでの内容で、URL のパスによるターゲットの分岐と WebSocket 対応を試す事ができました。
ここまで読んでお気づきの方もいると思いますが、今回スティッキーセッションは無効のままです。
WebSocket の特徴として、「最初につないだらつながったまま」なので不要なのでしょうね。
もう一つ、アイドルタイムアウトは長めにしておきましょう。無通信時間との兼ね合いで
ALB に切断させられてしまって少々はまりました。
皆さんも、長い付き合いになると思いますので ALB について色々と試してみてください。
感想
ALB がリリースされてからずっとうずうずしていましたが、やっとまともに使ってすっきりです。
ALB を初めてさわった感想としては、ターゲットグループが分かれている事に若干取っ付きにくさを感じましたが
最初だけで今ではむしろ管理し易くていいんじゃないかと思ってます。
1点だけ不満があるとすれば、サブネットを必ず二つ指定しないといけない点です。
AゾーンにしかEC2インスタンスが無いのにCゾーンにもサブネットを用意しないといけなくなりますし、
暖機申請の時にCゾーンにインスタンスが無くても問題にならないのでしょうか。
ALB については今後もブログネタになると思いますので、気になる点は少しずつ解消して公開していきます。
参考ページ
これらのページを参考にさせていただきました。
ありがとうございました。
PHPのみでHTML5のWebSocketを体験する方法
WebSocket Example
WebSocketについて調べてみた
いまさらHTML5 (WebSocket編)